import axios from 'axios'
import Msg from '../../assets/js/msg'
import qs from 'qs'
// import { Loading, MessageBox } from 'element-ui'
// 超时时间
axios.defaults.timeout = 30000

// var loadinginstace

axios.interceptors.request.use(config => {
  // loading
  // loadinginstace = Loading.service({ fullscreen: true })
  return config
}, error => {
  // MessageBox({
  //   title: '提示',
  //   message: '加载超时',
  //   callback: action => {
  //     loadinginstace.close()
  //   }
  // })
  return Promise.reject(error)
})

axios.interceptors.response.use(response => {
  // loadinginstace.close()
  return response
}, error => {
  return Promise.resolve(error.response)
})

export default {
  /**
   * @param url      交易码
   * @param data     请求参数
   * @param isAlert  默认值false, 若想自己定义弹窗消息,可传参true
   * @returns {Promise<any>}
   */
  post: function (url, data, isAlert = false) {
    return new Promise((resolve, reject) => {
      axios.post(url, data).then(res => {
        let { data, status } = res
        if (status === 200) {
          if (data === 'success') {
            resolve(data)
          } else if ('status' in data) {
            if (data.status === '000000') {
              resolve(data)
            } else {
              Msg.alert(data.msg)
              reject(data)
            }
          } else {
            if (data.Code === 0) {
              resolve(data)
            } else {
              if ('Code' in data) {
                Msg.alert(data.Message)
                reject(data)
              } else {
                if (Array.isArray(data) && data.length > 0) {
                  resolve(data)
                } else {
                  resolve(data)
                }
              }
            }
          }
        } else {
          if (isAlert) {
            reject(data)
          } else {
            reject(data)
            if (status === 500) {
              Msg.alert('连接超时！')
            } else if (status === 530) {
              Msg.confirm('登录超时，请重新登录！', {
                onConfirm: () => {
                  window.location.href = '/'
                }
              })
            } else if (status === 501) {
              Msg.alert('您的请求非法！')
            } else if (status === 404) {
              Msg.alert('您请求页面已迷路！')
            } else {
              Msg.alert('系统繁忙，请稍后重试！')
            }
          }
          reject(data)
        }
        // checkStatus(res)
      }).catch(data => {
        // console.log('error>>>>>>>>>>>>', error)
      })
    })
  },
  get: function (url, data, isAlert = false) {
    return new Promise((resolve, reject) => {
      axios.get(url, { params: data }).then(res => {
        let {data, status} = res
        if (status === 200) {
          if (data !== null) {
            if ('status' in data) {
              if (data.status === '000000') {
                resolve(data)
              } else {
                Msg.alert(data.msg)
                reject(data)
              }
            } else {
              if (data.Code === 0) {
                resolve(data)
              } else {
                if ('Code' in data) {
                  Msg.alert(data.Message)
                  reject(data)
                } else {
                  if ((Array.isArray(data) && data.length > 0) || Object.keys(data).length > 0) {
                    resolve(data)
                  } else if (Array.isArray(data) && Object.keys(data).length === 0) {
                    resolve([])
                  } else {
                    Msg.alert(data.Message)
                    reject(data)
                  }
                }
              }
            }
          } else {
            data = []
            resolve(data)
          }
        } else {
          if (status === 500) {
            Msg.alert('连接超时！')
          } else if (status === 530) {
            Msg.confirm('登录超时，请重新登录！', {
              onConfirm: () => {
                window.location.href = '/'
              }
            })
          } else if (status === 501) {
            Msg.alert('您的请求非法！')
          } else if (status === 404) {
            Msg.alert('您请求页面已迷路！')
          } else {
            Msg.alert('系统繁忙，请稍后重试！')
          }
          reject(data)
        }
        // checkStatus(res)
      }).catch(data => {
        // console.log('error>>>>>>>>>>>>', error)
      })
    })
  },
  mockPost: function (url, data = {}, isAlert = false) {
    return new Promise((resolve, reject) => {
      axios.post(`/mock/${url}`, data).then(res => {
        let { data, status } = res
        if (status === 200) {
          if (data === 'success') {
            resolve(data)
          } else if ('status' in data) {
            if (data.status === '000000') {
              resolve(data)
            } else {
              Msg.alert(`返回数据status状态码为${data.status}`)
              reject(data)
            }
          } else {
            if (data.Code === 0) {
              resolve(data)
            } else {
              if ('Code' in data) {
                Msg.alert(data.Message)
                reject(data)
              } else {
                if (Array.isArray(data) && data.length > 0) {
                  resolve(data)
                } else {
                  // Msg.alert(`未解析到服务器端返回status状态码！`)
                  // reject(data)
                  resolve(data)
                }
              }
            }
          }
        } else {
          if (isAlert) {
            reject(data)
          } else {
            reject(data)
            if (status === 500) {
              Msg.alert('连接超时！')
            } else if (status === 530) {
              Msg.confirm('登录超时，请重新登录！', {
                onConfirm: () => {
                  window.location.href = '/'
                }
              })
            } else if (status === 501) {
              Msg.alert('您的请求非法！')
            } else if (status === 404) {
              Msg.alert('您请求页面已迷路！')
            } else {
              Msg.alert('系统繁忙，请稍后重试！')
            }
          }
          reject(data)
        }
      }).catch(data => {
      })
    })
  },
  mockGet: function (url, data, error) {
    return new Promise((resolve, reject) => {
      axios.get(`/mock/${url}`, { params: data }).then(res => {
        let {data, status} = res
        if (status === 200) {
          if ('status' in data) {
            if (data.status === '000000') {
              resolve(data)
            } else {
              Msg.alert(`返回数据status状态码为${data.status}`)
              reject(data)
            }
          } else {
            if (data.Code === 0) {
              resolve(data)
            } else {
              if ('Code' in data) {
                Msg.alert(data.Message)
                reject(data)
              } else {
                if ((Array.isArray(data) && data.length > 0) || Object.keys(data).length > 0) {
                  resolve(data)
                } else {
                  Msg.alert(`未解析到服务器端返回status状态码！`)
                  reject(data)
                }
              }
            }
          }
        } else {
          if (status === 500) {
            Msg.alert('连接超时！')
          } else if (status === 530) {
            Msg.confirm('登录超时，请重新登录！', {
              onConfirm: () => {
                window.location.href = '/'
              }
            })
          } else if (status === 501) {
            Msg.alert('您的请求非法！')
          } else if (status === 404) {
            Msg.alert('您请求页面已迷路！')
          } else {
            Msg.alert('系统繁忙，请稍后重试！')
          }
          reject(data)
        }
        // checkStatus(res)
      }).catch(data => {
        // console.log('error>>>>>>>>>>>>', error)
      })
    })
  },
  /**
   *封装ajax请求 参数是普通键值对的
   * @param url      交易码
   * @param data     请求参数
   * @param isAlert  默认值false, 若想自己定义弹窗消息,可传参true
   * @returns {Promise<any>}
   */
  postFormData: function (url, data, isAlert = false) {
    return new Promise((resolve, reject) => {
      let urlParams = qs.stringify(data)
      axios.post(url, urlParams, {
        headers: {
          // 'Content-Type': 'application/x-www-form-urlencoded'
        }
      }).then(res => {
        let { data, status } = res
        if (status === 200) {
          if (data === 'success') {
            resolve(data)
          } else if ('status' in data) {
            if (data.status === '000000') {
              resolve(data)
            } else {
              Msg.alert(data.msg)
              reject(data)
            }
          } else {
            if (data.Code === 0) {
              resolve(data)
            } else {
              if ('Code' in data) {
                Msg.alert(data.Message)
                reject(data)
              } else {
                if (Array.isArray(data) && data.length > 0) {
                  resolve(data)
                } else {
                  resolve(data)
                }
              }
            }
          }
        } else {
          if (isAlert) {
            reject(data)
          } else {
            reject(data)
            if (status === 500) {
              Msg.alert('连接超时！')
            } else if (status === 530) {
              Msg.confirm('登录超时，请重新登录！', {
                onConfirm: () => {
                  window.location.href = '/'
                }
              })
            } else if (status === 501) {
              Msg.alert('您的请求非法！')
            } else if (status === 404) {
              Msg.alert('您请求页面已迷路！')
            } else {
              Msg.alert('系统繁忙，请稍后重试！')
            }
          }
          reject(data)
        }
        // checkStatus(res)
      }).catch(data => {
        // console.log('error>>>>>>>>>>>>', error)
      })
    })
  }
}
